/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Correo;

import java.util.Date;
import java.util.StringTokenizer;
import negocio.G_Bitacora;
import negocio.G_Contactos;
import negocio.G_Departamento;
import negocio.G_Expresion;
import negocio.G_Niveles;
import negocio.G_NivelesPrivilegio;
import negocio.G_Pago;
import negocio.G_Plan;
import negocio.G_PlanServicio;
import negocio.G_Privilegio;
import negocio.G_Profesion;
import negocio.G_Publicacion;
import negocio.G_Servicio;
import negocio.G_Usuario;
import negocio.G_UsuarioServicio;
import negocio.Reporte;

/**
 *
 * @author estudiante
 */
public class ZProcesarMail implements Runnable {

    private String valor = "grupo12sa@virtual.fcet.edu.bo";
    private boolean sw = true;
    private MailParser parseador = new MailParser();
    Thread hiloProcesar;

    /*
     * GESTORES DE DATOS AMARILLAS PROFESIONALES BO
     */
    G_Bitacora gbitacora = new G_Bitacora();
    G_Departamento gdepartamento = new G_Departamento();
    G_Niveles gniveles = new G_Niveles();
    G_NivelesPrivilegio gnivelesprivilegio = new G_NivelesPrivilegio();
    G_Pago gpago = new G_Pago();
    G_Plan gplan = new G_Plan();
    G_PlanServicio gplanservicio = new G_PlanServicio();
    G_Privilegio gprivilegio = new G_Privilegio();
    G_Profesion gprofesion = new G_Profesion();
    G_Publicacion gpublicacion = new G_Publicacion();
    G_Servicio gservicio = new G_Servicio();
    G_Usuario gusuario = new G_Usuario();
    G_Contactos gcontactos = new G_Contactos();
    G_Expresion gexpresion = new G_Expresion();
    G_UsuarioServicio gusuarioservicio = new G_UsuarioServicio();

    public ZProcesarMail() {
    }

    public void iniciarHiloProcesador() {
        hiloProcesar = new Thread(this);
        hiloProcesar.start();
    }

    public ZProcesarMail(ZConfiguracion c) {
        this.valor = c.getUsuario();
    }

    public void run() {
        try {
            while (sw) {

                if (ZRecibidorMail.vectorMails.size() > 0) {
                    procesa(ZRecibidorMail.vectorMails.remove(0));//
                    System.out.println(getClass().getName());
                }
            }
            Thread.sleep(1000);
        } catch (Exception e) {
        }
    }

    private void procesa(Mail m) {
        System.out.println("se procesa el mail--------------------->>>>>>>>>>>>" + m.toString());

        System.out.println(m.getSubject() + " " + m.getData());
        String data = Validar(m.getSubject(), m.getData());//si todo esta bien -> data=""
        System.out.println(data);
        System.out.println(m.getOrigen());
        System.out.println(m.getDestino());

        if (!data.isEmpty()) {//si (data != "")
            System.out.println("la parte de data no es vacio = " + data);
            ZDespachadorMail.vectorMails.add(new Mail(m.getOrigen(), (m.getDestino() != null) ? m.getDestino() : valor, "ERROR", data));
        } else {
            Mail mailcorreo = procesarMail(m);
            ZDespachadorMail.vectorMails.add(mailcorreo);
        }
    }

    private Mail procesarMail(Mail m) {
        String asunto = m.getSubject().trim();
        System.out.println("Esta prosesando el mail-->=" + m.getSubject());

        if (asunto.toUpperCase().indexOf("REGISTRAR") != -1) {
            String data = registrar(m);
            return new Mail(m.origen, (m.getDestino() != null) ? m.getDestino() : valor, "RE: " + m.getSubject(), data);
        }

        if (asunto.toUpperCase().indexOf("MODIFICAR") != -1) {
            String data = modificar(m);
            return new Mail(m.origen, (m.getDestino() != null) ? m.getDestino() : valor, "RE: " + m.getSubject(), data);
        }
        if (asunto.toUpperCase().indexOf("ELIMINAR") != -1) {
            return new Mail(m.origen, (m.getDestino() != null) ? m.getDestino() : valor, "RE: " + m.getSubject(), eliminar(m));
        }
        if (asunto.toUpperCase().indexOf("LISTAR") != -1) {
            return new Mail(m.origen, (m.getDestino() != null) ? m.getDestino() : valor, "RE: " + m.getSubject(), listar(m));
        }
        if (asunto.toUpperCase().indexOf("AYUDA") != -1) {
            String data = ayuda(m);
            System.out.println(data);
            return new Mail(m.origen, (m.getDestino() != null) ? m.getDestino() : valor, "RE: " + m.getSubject(), Reporte.getAyuda());
        }
        if (asunto.toUpperCase().indexOf("CONSULTAR") != -1) {
            String data = consultar(m);
            return new Mail(m.origen, (m.getDestino() != null) ? m.getDestino() : valor, "RE: " + m.getSubject(), data);
        }

        return new Mail(m.origen, (m.getDestino() != null) ? m.getDestino() : valor, "ERROR",
                "\nError: COMANDOS NO VALIDO EN EL ASUNTO.. Mande <AYUDA> en el asunto para mayor informacion");
    }

    public String limpiarEtiquetas(String datos) {
        StringTokenizer tk = new StringTokenizer(datos, "&");
        return tk.nextToken();

    }

    private String Validar(String asunto, String datos) {
        asunto = asunto.toUpperCase().trim();
        if (asunto.trim().length() == 0) {
            return "\nError: el Asunto no es valido.. Mande <AYUDA> en el asunto para mayor informacion";
        }
        if (!isABM(asunto)) {
            return "\nError: COMANDOS NO VALIDO EN EL ASUNTO.. Mande <AYUDA> en el asunto para mayor informacion";
        }
        if (datos != null && datos.trim().length() == 0 && (asunto.indexOf("LISTAR") == -1 || asunto.indexOf("AYUDA") == -1 || asunto.indexOf("CONSULTAR") == -1)) {
            return "\nError: FORMATO DE LOS DATOS SON INCORRECTOS.. Mande <AYUDA> en el asunto para mayor informacion";
        }
        return "";
    }

    private boolean isABM(String asunto) {
        asunto = asunto.toUpperCase();
        return (asunto.indexOf("REGISTRAR") == -1
                || asunto.indexOf("MODIFICAR") == -1
                || asunto.indexOf("ELIMINAR") == -1
                || asunto.indexOf("LISTAR") == -1
                || asunto.indexOf("CONSULTAR") == -1
                || asunto.indexOf("AYUDA") == -1);
    }

    private String registrar(Mail m) {

        String accion = m.getSubject().toUpperCase().trim();
        String data = m.getData();
        String atributos = limpiarEtiquetas(data);
        String correoFROM = m.getOrigen();

        parseador.parsearAtributos(atributos);

        if (accion.indexOf("USUARIO") > -1) {

            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(6)) {
                if (parseador.getVectAttrib().size() == 9) {
                    String nombre = parseador.nextAtributo().trim();
                    String foto = "";
                    String direccion = parseador.nextAtributo().trim();
                    String telefono = parseador.nextAtributo().trim();
                    String celular = parseador.nextAtributo().trim();
                    String email = parseador.nextAtributo().trim();
                    String http = "";
                    String usuario = parseador.nextAtributo().trim();
                    String contrasena = parseador.nextAtributo().trim();
                    int tipo = 1;
                    int estado = 1;
                    String descripcionniveles = parseador.nextAtributo().trim();
                    String descripciondepartamento = parseador.nextAtributo().trim();
//                String descripcionprofesion = "";
//                String descripcionplan = "";
                    int idniveles = gniveles.identificadorDescripcion(descripcionniveles);
                    int iddepartamento = gdepartamento.identificadorDescripcion(descripciondepartamento);
//              int idprofesion = 0;
//              int idplan = 0;

                    try {
                        gusuario.insertar(nombre, foto, direccion, telefono, celular, email, http, usuario, contrasena, tipo, estado, gniveles.cargar(idniveles), gdepartamento.cargar(iddepartamento), null, null);
                        System.out.println("---estamos insertando usuario-------------------------");
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(6));
                        return "INFORMACION: transaccion realizada con exito";
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploRegistrarUsuario();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }

        }

        if (accion.indexOf("CLIENTE") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(1)) {
                if (parseador.getVectAttrib().size() == 10) {
                    String nombre = parseador.nextAtributo().trim();
                    String foto = "";
                    String direccion = parseador.nextAtributo().trim();
                    String telefono = parseador.nextAtributo().trim();
                    String celular = parseador.nextAtributo().trim();
                    String email = parseador.nextAtributo().trim();
                    String http = parseador.nextAtributo().trim();
                    String usuario = "";
                    String contrasena = "";
                    int tipo = 2;
                    int estado = 1;
                    String descripcionniveles = parseador.nextAtributo().trim();
                    String descripciondepartamento = parseador.nextAtributo().trim();
                    String descripcionprofesion = parseador.nextAtributo().trim();
                    String descripcionplan = parseador.nextAtributo().trim();

                    int idniveles = gniveles.identificadorDescripcion(descripcionniveles);
                    int iddepartamento = gdepartamento.identificadorDescripcion(descripciondepartamento);
                    int idprofesion = gprofesion.identificadorDescripcion(descripcionprofesion);
                    int idplan = gplan.identificadorDescripcion(descripcionplan);

                    try {


                        gusuario.insertar(nombre, foto, direccion, telefono, celular, email, http, usuario, contrasena, tipo, estado, gniveles.cargar(idniveles), gdepartamento.cargar(iddepartamento), gprofesion.cargar(idprofesion), gplan.cargar(idplan));
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(1));
                        return "transaccion realizada con exito";
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploRegistrarCliente();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }


        if (accion.indexOf("PAGO") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(21)) {
                if (parseador.getVectAttrib().size() == 1) {
                    int cod = Integer.parseInt(parseador.nextAtributo().trim());
                    try {
                        gpago.insertar(new Date(), new Date(), gusuario.cargar(cod));
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(21));
                        return "transaccion realizada con exito";
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploRegistrarPago();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }



        if (accion.indexOf("PUBLICACION") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(36)) {
                if (parseador.getVectAttrib().size() == 2) {
                    int codusuario = gusuario.identificadorUsuario(correoFROM.trim());
                    String descripcion = parseador.nextAtributo().trim();
                    String ntipo = parseador.nextAtributo().trim().toUpperCase();
                    int tipo = -1;
                    if (ntipo.indexOf("ACADEMICO") > -1) {
                        tipo = 1;
                    } else {
                        tipo = 2;
                    }
                    try {
                        gpublicacion.insertar(tipo, gusuario.cargar(codusuario), descripcion);
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(36));
                        return "transaccion realizada con exito";
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploRegistrarPublicacion();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.indexOf("SERVICIO") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(41)) {
                if (parseador.getVectAttrib().size() == 1) {
                    String descripcion = parseador.nextAtributo().trim();
                    try {
                        gservicio.insertar(descripcion);
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(41));

                        return "transaccion realizada con exito usted registro un servicio";
                    } catch (Exception e) {
                        return "error al modificar, vea el siguiente ejemplo :"
                                + Reporte.ejemploRegistrarServicio();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }



        if (accion.indexOf("ACTIVIDAD") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(46)) {
                if (parseador.getVectAttrib().size() == 3) {
                    String descripcionservicio = parseador.nextAtributo().trim();
                    String destino = parseador.nextAtributo().trim();
                    int idServicio = gservicio.identificadorDescripcion(descripcionservicio);
                    String mensaje = parseador.nextAtributo().trim();
                    try {
                        gusuarioservicio.insertar(gusuario.cargarCorreo(correoFROM), gservicio.cargar(idServicio), new Date());
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(46));
                        return "transaccion realizada con exito";
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploRegistrarActividad();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }


        if (accion.indexOf("COMENTARIO") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(63)) {
                if (parseador.getVectAttrib().size() == 1) {
                    String descripcion = parseador.nextAtributo().trim();
                    int tipo=1;
                    try {
                        gexpresion.insertar(descripcion, tipo,gusuario.cargarCorreo(correoFROM.trim()));
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(63));

                        return "transaccion realizada con exito usted registro un servicio";
                    } catch (Exception e) {
                        return "error al modificar, vea el siguiente ejemplo :"
                                + Reporte.ejemploRegistrarComentario();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.indexOf("SUGERENCIA") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(64)) {
                if (parseador.getVectAttrib().size() == 1) {
                    String descripcion = parseador.nextAtributo().trim();
                                       int tipo=2;
                    try {
                        gexpresion.insertar(descripcion, tipo,gusuario.cargarCorreo(correoFROM.trim()));
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(64));
                        return "transaccion realizada con exito usted registro un servicio";
                    } catch (Exception e) {
                        return "error al modificar, vea el siguiente ejemplo :"
                                + Reporte.ejemploRegistrarSugerencia();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }


        return "ERROR";
    }

    private String modificar(Mail m) {
        String accion = m.getSubject().toUpperCase().trim();
        String data = m.getData();
        String correoFROM = m.getOrigen();
        String atributos = limpiarEtiquetas(data);
        parseador.parsearAtributos(atributos);

        if (accion.indexOf("USUARIO") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(7)) {
                if (parseador.getVectAttrib().size() == 10) {
                    int cod = Integer.parseInt(parseador.nextAtributo().trim());
                    String nombre = parseador.nextAtributo().trim();
                    String foto = "";
                    String direccion = parseador.nextAtributo().trim();
                    String telefono = parseador.nextAtributo().trim();
                    String celular = parseador.nextAtributo().trim();
                    String email = parseador.nextAtributo().trim();
                    String http = "";
                    String usuario = parseador.nextAtributo().trim();
                    String contrasena = parseador.nextAtributo().trim();
                    int tipo = 1;
                    int estado = 1;
                    String descripcionniveles = parseador.nextAtributo().trim();
                    String descripciondepartamento = parseador.nextAtributo().trim();
                    String descripcionprofesion = "";
                    String descripcionplan = "";

                    int idniveles = gniveles.identificadorDescripcion(descripcionniveles);
                    int iddepartamento = gdepartamento.identificadorDescripcion(descripciondepartamento);
                    int idprofesion = 0;
                    int idplan = 0;

                    try {
                        gusuario.modificar(cod, nombre, foto, direccion, telefono, celular, email, http, usuario, contrasena, tipo, estado, gniveles.cargar(idniveles), gdepartamento.cargar(iddepartamento), null, null);
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(7));
                        return "transaccion realizada con exito";
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploModificarUsuario();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }



        if (accion.indexOf("CLIENTE") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(2)) {
                if (parseador.getVectAttrib().size() == 11) {
                    int cod = Integer.parseInt(parseador.nextAtributo().trim());
                    String nombre = parseador.nextAtributo().trim();
                    String foto = "";
                    String direccion = parseador.nextAtributo().trim();
                    String telefono = parseador.nextAtributo().trim();
                    String celular = parseador.nextAtributo().trim();
                    String email = parseador.nextAtributo().trim();
                    String http = parseador.nextAtributo().trim();
                    String usuario = "";
                    String contrasena = "";
                    int tipo = 2;
                    int estado = 1;
                    String descripcionniveles = parseador.nextAtributo().trim();
                    String descripciondepartamento = parseador.nextAtributo().trim();
                    String descripcionprofesion = parseador.nextAtributo().trim();
                    String descripcionplan = parseador.nextAtributo().trim();

                    int idniveles = gniveles.identificadorDescripcion(descripcionniveles);
                    int iddepartamento = gdepartamento.identificadorDescripcion(descripciondepartamento);
                    int idprofesion = gprofesion.identificadorDescripcion(descripcionprofesion);
                    int idplan = gplan.identificadorDescripcion(descripcionplan);


                    try {
                        gusuario.modificar(cod, nombre, foto, direccion, telefono, celular, email, http, usuario, contrasena, tipo, estado, gniveles.cargar(idniveles), gdepartamento.cargar(iddepartamento), gprofesion.cargar(idprofesion), gplan.cargar(idplan));
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(2));
                        return "transaccion realizada con exito";
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploModificarCliente();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.indexOf("PUBLICACION") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(37)) {
                if (parseador.getVectAttrib().size() == 3) {
                    int id = Integer.parseInt(parseador.nextAtributo().trim().toUpperCase());
                    int codusuario = gusuario.identificadorUsuario(correoFROM.trim());
                    String descripcion = parseador.nextAtributo().trim();
                    String ntipo = parseador.nextAtributo().trim().toUpperCase();
                    int tipo = -1;
                    if (ntipo.indexOf("ACADEMICO") > -1) {
                        tipo = 1;
                    } else {
                        tipo = 2;
                    }
                    try {
                        gpublicacion.modificar(id, tipo, gusuario.cargar(codusuario), descripcion);
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(37));
                        return "transaccion realizada con exito";
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploModificarPublicacion();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.indexOf("SERVICIO") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(42)) {
                if (parseador.getVectAttrib().size() == 2) {
                    int id = Integer.parseInt(parseador.nextAtributo().trim());
                    String descripcion = parseador.nextAtributo().trim();
                    try {
                        gservicio.modificar(id, descripcion);
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(42));
                        return "transaccion realizada con exito";
                    } catch (Exception e) {
                        return "error al modificar, vea el siguiente ejemplo :"
                                + Reporte.ejemploModificarServicio();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        return "";
    }

    private String eliminar(Mail m) {
        String accion = m.getSubject().toUpperCase().trim();
        String data = m.getData();
        String correoFROM = m.getOrigen();
        String atributos = limpiarEtiquetas(data);
        parseador.parsearAtributos(atributos);

        if (accion.indexOf("USUARIO") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(8)) {
                if (parseador.getVectAttrib().size() == 1) {
                    int cod = Integer.parseInt(parseador.nextAtributo().trim());

                    try {
                        gusuario.eliminar(cod);
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(8));
                        return "transaccion realizada con exito";
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploEliminarUsuario();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.indexOf("CLIENTE") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(3)) {
                if (parseador.getVectAttrib().size() == 1) {
                    int cod = Integer.parseInt(parseador.nextAtributo().trim());

                    try {
                        gusuario.eliminar(cod);
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(3));
                        return "transaccion realizada con exito";
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploEliminarCliente();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.indexOf("PUBLICACION") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(38)) {
                if (parseador.getVectAttrib().size() == 1) {
                    int id = Integer.parseInt(parseador.nextAtributo().trim().toUpperCase());

                    try {
                        gpublicacion.eliminar(id);
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(38));
                        return "transaccion realizada con exito";
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploEliminarPublicacion();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }
        if (accion.indexOf("SERVICIO") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(43)) {
                if (parseador.getVectAttrib().size() == 1) {
                    int id = Integer.parseInt(parseador.nextAtributo().trim());
                    try {
                        gservicio.eliminar(id);
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(43));
                        return "transaccion realizada con exito";
                    } catch (Exception e) {
                        return "error al eliminar, vea el siguiente ejemplo :"
                                + Reporte.ejemploEliminarServicio();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        return "";
    }

    private String listar(Mail m) {
        String accion = m.getSubject().toUpperCase().trim();
        String correoFROM = m.getOrigen();

        if (accion.indexOf("BITACORA") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(49)) {
                if (parseador.getVectAttrib().size() == 0) {
                    try {
                        String rescpuestaConsulta = gbitacora.reporteBitacora();

                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(49));
                        return rescpuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReporteBitacora();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        //  AGREGEE DESDE AQUIIIII

        if (accion.indexOf("CLIENTES") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(4)) {
                if (parseador.getVectAttrib().size() == 0) {
                    try {
                        String rescpuestaConsulta = gusuario.reporteClientes();

                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(4));
                        return rescpuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReporteClientes();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.indexOf("USUARIOS") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(9)) {
                if (parseador.getVectAttrib().size() == 0) {
                    try {
                        String rescpuestaConsulta = gusuario.reporteUsuarios();
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(9));
                        return rescpuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReporteUsuarios();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.indexOf("DEPARTAMENTOS") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(14)) {
                if (parseador.getVectAttrib().size() == 0) {
                    try {
                        String rescpuestaConsulta = gdepartamento.reporteDepartamentos();
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(14));
                        return rescpuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReporteDepartamentos();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.indexOf("NIVELES") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(19)) {
                if (parseador.getVectAttrib().size() == 0) {
                    try {
                        String rescpuestaConsulta = gniveles.reporteNiveles();
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(19));
                        return rescpuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReporteNiveles();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.indexOf("PLANES") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(29)) {
                if (parseador.getVectAttrib().size() == 0) {
                    try {
                        String respuestaConsulta = gplan.reportePlanes();
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(29));
                        return respuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReportePlanes();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.indexOf("PROFESIONES") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(34)) {
                if (parseador.getVectAttrib().size() == 0) {
                    try {
                        String respuestaConsulta = gprofesion.reporteProfesiones();
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(34));
                        return respuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReporteProfesiones();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.indexOf("SERVICIOS") > -1) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(44)) {
                if (parseador.getVectAttrib().size() == 0) {
                    try {
                        String respuestaConsulta = gservicio.reporteServicios();
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(44));
                        return respuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReporteServicios();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        return "INFORMACION : NO EXISTEN DATOS";
    }

    private String ayuda(Mail m) {
        String accion = m.getSubject().toUpperCase().trim();
        String correoFROM = m.getOrigen();
        if (accion.indexOf("AYUDA") > -1) {
            try {
                String rescpuestaConsulta = Reporte.getAyuda();
                gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(48));
                return rescpuestaConsulta;
            } catch (Exception e) {
                return "error al registrar, vea el siguiente ejemplo :"
                        + Reporte.ejemploReporteBitacora();
            }
        }
        return "";
    }

    private String consultar(Mail m) {

        String accion = m.getSubject().toUpperCase().trim();
        String correoFROM = m.getOrigen();
        Boolean tieneDato = false;
        String data = m.getData();

        if (data == null) {
            tieneDato = true;
        } else {
            String atributos = limpiarEtiquetas(data);

            parseador.parsearAtributos(atributos);
        }

         if (accion.contentEquals("CONSULTAR USO SERVICIOS")) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(65)) {
                if (parseador.getVectAttrib().size() == 1) {
                    int codUser = Integer.parseInt(parseador.nextAtributo().trim());
                    try {
                        String respuestaConsulta = gservicio.reporteUsoServicios(codUser);
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(65));
                        return respuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploConsultarUsoServicio();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.contentEquals("CONSULTAR BITACORA USUARIO")) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(58)) {
                if (parseador.getVectAttrib().size() == 1) {
                    int codUser = Integer.parseInt(parseador.nextAtributo().trim());
                    try {
                        String respuestaConsulta = gbitacora.reporteBitacoraAccesoXUsuario(codUser);
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(58));
                        return respuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReporteBitacoraXUsuario();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }
        if (accion.contentEquals("CONSULTAR ACCESO BITACORA")) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(47)) {
                if (tieneDato) {

                    try {
                        String respuestaConsulta = gbitacora.reporteAccesoBitacora();
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(47));
                        return respuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploConsultarAcceso();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.contentEquals("CONSULTAR COMENTARIOS")) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(60)) {
                if (tieneDato) {
                    try {
                        String respuestaConsulta = gexpresion.reporteComentarios();
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(60));
                        return respuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReporteComentarios();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.contentEquals("CONSULTAR SUGERENCIAS")) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(61)) {
                if (tieneDato) {
                    try {
                        String respuestaConsulta = gexpresion.reporteSugerencias();
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(61));
                        return respuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReporteSugerencias();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.contentEquals("CONSULTAR CLIENTE DEPARTAMENTO")) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(53)) {
                if (parseador.getVectAttrib().size() == 1) {
                    String dpto = parseador.nextAtributo().trim();
                    try {
                        String respuestaConsulta = gusuario.reporteClientesXDepartamento(dpto);
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(53));
                        return respuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReporteDepartamentos();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.contentEquals("CONSULTAR CLIENTE PROFESION")) {

            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(54)) {
                if (parseador.getVectAttrib().size() == 1) {
                    String profesion = parseador.nextAtributo().trim();
                    try {
                        String respuestaConsulta = gusuario.reporteClientesXProfesion(profesion);
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(54));
                        return respuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReporteClientesXProfesion();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.contentEquals("CONSULTAR CLIENTE PROFESION DEPARTAMENTO")) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(55)) {
                if (parseador.getVectAttrib().size() == 2) {
                    String dpto = parseador.nextAtributo().trim();
                    String profesion = parseador.nextAtributo().trim();
                    try {
                        String respuestaConsulta = gusuario.reporteClientesXProfesionDpto(profesion, dpto);
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(55));
                        return respuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReporteClientesXProfesionDepartamento();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.contentEquals("CONSULTAR PRIVILEGIOS NIVEL")) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(56)) {
                if (parseador.getVectAttrib().size() == 1) {
                    String nivel = parseador.nextAtributo().trim();
                    try {
                        String respuestaConsulta = gnivelesprivilegio.reportePrivilegiosNivel(nivel);
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(56));
                        return respuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReportePrivilegiosNivel();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.contentEquals("CONSULTAR SERVICIOS PLAN")) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(57)) {
                if (parseador.getVectAttrib().size() == 1) {
                    String plan = parseador.nextAtributo().trim();
                    try {
                        String respuestaConsulta = gplan.reporteServiciosPlan(plan);
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(57));
                        return respuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReporteServiciosPlan();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.contentEquals("CONSULTAR PAGOS")) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(62)) {
                if (tieneDato) {
                    try {
                        String respuestaConsulta = gpago.reportePagosCliente(correoFROM);
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(62));
                        return respuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReporteConsultarPagos();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.contentEquals("CONSULTAR PUBLICACION ACADEMICA")) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(51)) {
                if (parseador.getVectAttrib().size() == 1) {
                    int cod = Integer.parseInt(parseador.nextAtributo().trim());
                    try {

                        gpublicacion.getPublicacion().setUsuario(gusuario.cargar(cod));
                        String respuestaConsulta = gpublicacion.reportePublicacionAcademica();
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(51));
                        return respuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReportePublAcademica();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

         if (accion.contentEquals("CONSULTAR PUBLICACION LABORAL")) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(52)) {
                if (parseador.getVectAttrib().size() == 1) {
                    int cod = Integer.parseInt(parseador.nextAtributo().trim());
                    try {

                        gpublicacion.getPublicacion().setUsuario(gusuario.cargar(cod));
                        String respuestaConsulta = gpublicacion.reportePublicacionLaboral();
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(52));
                        return respuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReportePublLaboral();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

        if (accion.contentEquals("CONSULTAR CURRICULUM")) {
            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(50)) {
                if (parseador.getVectAttrib().size() == 1) {
                    int cod = Integer.parseInt(parseador.nextAtributo().trim());
                    try {
                        gusuario.cargar(cod);
                        gpublicacion.getPublicacion().setUsuario(gusuario.getUsu());

                        String datusurio=gusuario.reporteDatosCliente();
                        String academica=gpublicacion.reportePublicacionAcademica();
                        String laboral=gpublicacion.reportePublicacionLaboral();

                        String respuestaConsulta = datusurio+academica+laboral;
                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(50));
                        return respuestaConsulta;
                    } catch (Exception e) {
                        return "error al registrar, vea el siguiente ejemplo :"
                                + Reporte.ejemploReporteCurriculum();
                    }
                }
            } else {
                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
            }
        }

//        if ( accion.contentEquals("CONSULTAR CONTACTOS")) {
////            if (gusuario.cargar(gusuario.identificadorUsuario(correoFROM)).isUsuarioPrivilegio(29)) {
//                if (parseador.getVectAttrib().size() == 1) {
//                    int codUser=Integer.parseInt(parseador.nextAtributo().trim());
//                    try {
//                        String respuestaConsulta ="";
////                        gbitacora.insertar(new Date(), gusuario.cargarCorreo(correoFROM.trim()), gprivilegio.cargar(29));
//                        return respuestaConsulta;
//                    } catch (Exception e) {
//                        return "error al registrar, vea el siguiente ejemplo :"
//                                + Reporte.ejemploReporteBitacoraXUsuario();
//                    }
//                }
////            } else {
////                return "lo sentimos usted no esta habilitado para realizar esta transaccion......";
////            }
//        }


        return "INFORMACION : NO EXISTEN DATOS";
    }

    private String buscar(Mail m) {
        return "";
    }
}
